home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / viewers / polyview / polyvw31.lha / Polyview3.1 / new / pvlight.c < prev    next >
C/C++ Source or Header  |  1993-06-23  |  5KB  |  140 lines

  1. /*****************************************************************************
  2.  * NCSA Polyview 3.0                                                         *
  3.  *                                                                           *
  4.  * Version 3 changes and additions by Marc Andreessen.                       *
  5.  * Version 2 by Brian Calvert.                                               *
  6.  *                                                                           *
  7.  * Software Development Group                                                *
  8.  * National Center for Supercomputing Applications                           *
  9.  * University of Illinois at Urbana-Champaign                                *
  10.  *                                                                           *
  11.  * This is BETA release software.  As such it may contain software bugs and  *
  12.  * exhibit inconsistencies.                                                  *
  13.  *                                                                           *
  14.  * Please send bug reports to polyview@ncsa.uiuc.edu.                        *
  15.  *                                                                           *
  16.  * Copyright (c) 1992 The Board of Trustees of the University of Illinois.   *
  17.  *                                                                           *
  18.  * Permission to use, copy, and modify this software and its                 *
  19.  * documentation for educational, research, and non-profit purposes is       *
  20.  * hereby granted, provided that the above copyright notice, the original    *
  21.  * authors names, and this permission notice appear in all such copies.      *
  22.  * Any distribution of this software requires the explicit and written       *
  23.  * authorization of the authors.                                             *
  24.  *                                                                           *
  25.  * The University of Illinois makes no representations about the             *
  26.  * suitability of this software for any purpose.  It is provided "as is"     *
  27.  * without warranty of any kind.                                             *
  28.  *****************************************************************************/
  29.  
  30. /* $Header: /usr3/people/gbourhis/pv3/new/RCS/pvlight.c,v 1.1 92/09/18 10:55:26 marca Exp $ */
  31.  
  32. #ifdef RCSLOG
  33. $Log:    pvlight.c,v $
  34.  * Revision 1.1  92/09/18  10:55:26  marca
  35.  * Initial revision
  36.  * 
  37. #endif
  38.  
  39. #include "pv.h"
  40.  
  41. static float DefaultSurface[] = {
  42.   AMBIENT, 0.3, 0.3, 0.3,
  43.   DIFFUSE, 1.0, 1.0, 1.0,
  44.   SPECULAR, 0.3, 0.3, 0.3,
  45.   SHININESS, 96,
  46.   LMNULL};
  47. static float DefaultLight[] = {
  48.   POSITION, 1.0, 0.0, 0.0, 0.0,
  49.   LCOLOR, 1.0, 1.0, 1.0,
  50.   LMNULL};
  51. static float DefaultModel[] = {
  52.   LMNULL};
  53. static float DefaultLightPosition[] = {
  54.   POSITION, 0.0, 0.0, 0.0, 0.0,
  55.   LMNULL};
  56.  
  57.  
  58. /* The manual claims that lmdef's hold true for all windows but
  59.    lmbinds only hold true for one window.  So we'll do lmbind each
  60.    time through the drawing loop for all properties :-(. */
  61.  
  62.  
  63. void init_lighting (void)
  64. {
  65.   /* Define model and material; lights will be defined each
  66.      time through the drawing loop. */
  67.   lmdef (DEFLMODEL, 1, 0, DefaultModel);
  68.   lmdef (DEFMATERIAL, 1, 0, DefaultSurface);
  69.   
  70.   return;
  71. }
  72.  
  73.  
  74. void light_twoside_on (state_t *state, window_t *win)
  75. {
  76.   WIN_LIGHT_TWOSIDE(win) = 1;
  77.   
  78.   return;
  79. }
  80.  
  81. void light_twoside_off (state_t *state, window_t *win)
  82. {
  83.   WIN_LIGHT_TWOSIDE(win) = 0;
  84.   
  85.   return;
  86. }
  87.  
  88.  
  89. void lighting_on (state_t *state, window_t *win, float x, float y, float z)
  90. {
  91.   /* Set the new position. */
  92.   DefaultLightPosition[1] = x;
  93.   DefaultLightPosition[2] = y;
  94.   DefaultLightPosition[3] = z;
  95.   
  96.   /* Def the new position. */
  97.   lmdef (DEFLIGHT, 1, 0, DefaultLightPosition);
  98.   
  99.   if (WIN_LIGHT_TWOSIDE(win))
  100.     {
  101.       DefaultLightPosition[1] = -x;
  102.       DefaultLightPosition[2] = -y;
  103.       DefaultLightPosition[3] = -z;
  104.       lmdef (DEFLIGHT, 2, 0, DefaultLightPosition);
  105.     }
  106.   
  107.   /* Bind the material to turn everything on. */
  108.   /* Bind lighting model and light also, so lighting will
  109.      work across multiple windows. */
  110.   lmbind (MATERIAL, 1);
  111.   lmbind (LMODEL, 1);
  112.   lmbind (LIGHT0, 1);
  113.   
  114.   /* If twosided lighting is enabled, bind the other light,
  115.      else turn it off (in case it was bound earlier). */
  116.   if (WIN_LIGHT_TWOSIDE(win))
  117.     lmbind (LIGHT1, 2);
  118.   else
  119.     lmbind (LIGHT1, 0);
  120.   
  121.   /* Switch lmcolor modes. */
  122.   lmcolor (LMC_AD);
  123.   
  124.   return;
  125. }
  126.  
  127.  
  128. void lighting_off (void)
  129. {
  130.   /* Go back to unlit mode.  Unbinding material is enough
  131.      to turn everything off. */
  132.   lmbind (MATERIAL, 0);
  133.   
  134.   /* Go back to cpack's affecting color. */
  135.   lmcolor (LMC_COLOR);
  136.   
  137.   return;
  138. }
  139.  
  140.